/-imports ...
/-imports/acorn ...
acorn.js
acorn_loose.js
walk.js
/-imports/codemirror
active-line.js
brace-fold.js
closebrackets.js
closetag.js
codemirror.css
codemirror.js
comment-fold.js
comment.js
continuecomment.js
css.js
dialog.css
dialog.js
foldcode.js
foldgutter.css
foldgutter.js
html-hint.js
htmlembedded.js
htmlmixed.js
javascript-hint.js
javascript.js
match-highlighter.js
matchbrackets.js
search.js
searchcursor.js
show-hint.css
show-hint.js
tern.css
tern.js
trailingspace.js
xml-fold.js
xml-hint.js
xml.js
/-imports/knockout
knockout-3.0.0.js
/-imports/tern
comment.js
def.js
doc_comment.js
infer.js
signal.js
tern.js
/-imports/typescript
lib.d.ts
typescriptServices.js
/-imports/zip.js
deflate.js
inflate.js
zip.js
/-layout
file.html
folder.html
page.html
teapo.css
/-typings
codemirror.d.ts
knockout.d.ts
typescriptServices.d.ts
websql.d.ts
zip.js.d.ts
TypeScriptService.ts
editor-std.ts
editor-x-css.ts
editor-x-html.ts
editor-x-js.ts
editor-x-ts.ts
editor.ts
files.ts
ko.ts
persistence.ts
shell.ts
teapo.html
teapo.js
teapo.ts
1691
 
1692
  function parsePropertyName() {
1693
    if (tokType === _num || tokType === _string) return parseExprAtom();
1694
    return parseIdent(true);
1695
  }
1696
 
1697
  // Parse a function declaration or literal (depending on the
1698
  // `isStatement` parameter).
1699
 
1700
  function parseFunction(node, isStatement) {
1701
    if (tokType === _name) node.id = parseIdent();
1702
    else if (isStatement) unexpected();
1703
    else node.id = null;
1704
    node.params = [];
1705
    var first = true;
1706
    expect(_parenL);
1707
    while (!eat(_parenR)) {
1708
      if (!first) expect(_comma); else first = false;
1709
      node.params.push(parseIdent());
1710
    }
1711
 
1712
    // Start a new scope with regard to labels and the `inFunction`
1713
    // flag (restore them to their old value afterwards).
1714
    var oldInFunc = inFunction, oldLabels = labels;
1715
    inFunction = true; labels = [];
1716
    node.body = parseBlock(true);
1717
    inFunction = oldInFunc; labels = oldLabels;
1718
 
1719
    // If this is a strict mode function, verify that argument names
1720
    // are not repeated, and it does not try to bind the words `eval`
1721
    // or `arguments`.
1722
    if (strict || node.body.body.length && isUseStrict(node.body.body[0])) {
1723
      for (var i = node.id ? -1 : 0; i < node.params.length; ++i) {
1724
        var id = i < 0 ? node.id : node.params[i];
1725
        if (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name))
1726
          raise(id.start, "Defining '" + id.name + "' in strict mode");
1727
        if (i >= 0) for (var j = 0; j < i; ++j) if (id.name === node.params[j].name)
1728
          raise(id.start, "Argument name clash in strict mode");
1729
      }
1730
    }
1731
 
1732
    return finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression");
1733
  }
1734
 
1735
  // Parses a comma-separated list of expressions, and returns them as
1736
  // an array. `close` is the token type that ends the list, and
1737
  // `allowEmpty` can be turned on to allow subsequent commas with
1738
  // nothing in between them to be parsed as `null` (which is needed
1739
  // for array literals).
1740
 
1741
  function parseExprList(close, allowTrailingComma, allowEmpty) {
1742
    var elts = [], first = true;
1743
    while (!eat(close)) {
1744
      if (!first) {
1745
        expect(_comma);
1746
        if (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;
1747
      } else first = false;
1748
 
1749
      if (allowEmpty && tokType === _comma) elts.push(null);
1750
      else elts.push(parseExpression(true));
1751
    }
1752
    return elts;
1753
  }
1754
 
1755
  // Parse the next token as an identifier. If `liberal` is true (used
1756
  // when parsing properties), it will also convert keywords into
1757
  // identifiers.
1758
 
1759
  function parseIdent(liberal) {
1760
    var node = startNode();
1761
    node.name = tokType === _name ? tokVal : (liberal && !options.forbidReserved && tokType.keyword) || unexpected();
1762
    tokRegexpAllowed = false;
1763
    next();
1764
    return finishNode(node, "Identifier");
1765
  }
1766
 
1767
});
1768